package jmine.tec.di.injector;

import java.util.List;

import jmine.tec.di.scope.TypedScope;
import jmine.tec.di.type.TypeConvertionException;

/**
 * Injeta todas as dependências em um objeto.
 */
public interface DependencyInjector {

    /**
     * @param target the target
     * @param properties the serviceproperties
     * @throws TypeConvertionException e
     */
    void inject(Object target, TypedScope properties) throws TypeConvertionException;

    /**
     * Valida
     * 
     * @param scope the scope
     * @return {@link List} de erros
     */
    List<String> validateRequiredProperties(TypedScope scope);

    /**
     * @return the allInjectors
     */
    Injector[] getAllInjectors();
}
